`timescale 1ns / 1ps

module init_bola(filas_i,columnas_i,posicion_bola_fila_i,posicion_bola_columna_i,bola_o,bola_rgb_o);
	
	//ENTRADAS
	input [9:0]filas_i;
	input [9:0]columnas_i;
	input [9:0]posicion_bola_fila_i;
	input [9:0]posicion_bola_columna_i;
	
	//SALIDAS
	output bola_o;
	output [7:0]bola_rgb_o;

	//VARIABLES DE RELIEVE
	wire bola_con_esquinas, tiene_esquinas;
	wire [2:0] tipo_pixel, estado_bola;
	reg [7:0] forma_bola;

	//DETERMINA LA FORMA QUE POSEE LA BOLA EN DETERMINADO PUNTO
	always @*
	begin
		case (tipo_pixel)
			3'h0: forma_bola = 8'b00111100;
			3'h1: forma_bola = 8'b01111110;
			3'h6: forma_bola = 8'b01111110;
			3'h7: forma_bola = 8'b00111100;
			default: forma_bola = 8'b11111111;
		endcase
	end
	
	//ASIGNACIONES QUE SE ENCARGAN DE REVISAR SI SE DEBE PINTAR LA BOLA EN DETERMINADO
	//PUNTO, ES DECIR, SI SE ENCUENTRA EN UNA ESQUINA O NO
	assign tipo_pixel = columnas_i - posicion_bola_columna_i;
	assign estado_bola =  filas_i - posicion_bola_fila_i;
	assign tiene_esquinas =  forma_bola[estado_bola];
	
	//ASIGNACIÓN SECUENCIAL DE LA BOLA SEGÚN SEA EL VALOR DE LA FILA Y LA COLUMNA
	assign bola_con_esquinas = (filas_i >= posicion_bola_fila_i) && (filas_i <= posicion_bola_fila_i + 7) &&
							  (columnas_i >= posicion_bola_columna_i) && (columnas_i <= posicion_bola_columna_i + 7);

	//SE DEFINE EL COLOR DEL QUE SE PINTARÁN LA BOLA
	assign bola_rgb_o = 8'b11011110;
	
	//REVSION FINAL DE SI SE DEBE O NO PINTAR LA BOLA
	assign bola_o = bola_con_esquinas && tiene_esquinas;

endmodule
